package com.jjb.saas.gen.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jjb.saas.gen.utils.EnumHelper;
import com.jjb.saas.gen.utils.StringUtils;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Author: WGG
 * @Date: 2022/3/26 15:33
 */
@Data
@TableName("gen_table_column")
public class GenTableColumn implements Serializable {

    private static final long serialVersionUID = 1L;

    /** 编号 */
    @TableId(value = "column_id",type = IdType.ASSIGN_ID)
    private Long columnId;

    /** 归属表编号 */
    private Long tableId;

    /** 列名称 */
    private String columnName;

    /** 列描述 */
    private String columnComment;

    /** 列类型 */
    private String columnType;

    /** JAVA类型 */
    private String javaType;

    /** JAVA字段名 */
    private String javaField;

    /** 是否主键（1是） */
    private String isPk;

    /** 是否自增（1是） */
    private String isIncrement;

    /** 是否必填（1是） */
    private String isRequired;

    /** 是否为插入字段（1是） */
    private String isInsert;

    /**是否排重**/
    private String isRepetition="0";

    /** 是否编辑字段（1是） */
    private String isEdit;

    /** 是否列表字段（1是） */
    private String isList;

    /** 是否枚举字段（1是） */
    private String isEnum;

    /** 枚举，规则
     {
     "type": "枚举类型，对应字典类型",
     "class":"枚举类名",
     "data": [{
     "code": "xxx，对应字典值",
     "info": "xxxx，对应字典值描述"
     }, {
     "code": "xxx",
     "info": "xxx"
     }],
     "info": "枚举描述，对应字典类型描述"
     } */
    private String enumInfo;
    /** 枚举的类名 */
    @TableField(exist = false)
    private String enumClassName;
    /** 枚举的字典TYPE名称 */
    @TableField(exist = false)
    private String enumTypeName;
    /** 枚举描述 */
    @TableField(exist = false)
    private String enumClassInfo;
    /** 枚举data */
    @TableField(exist = false)
    private List<EnumHelper> enumHelpers;
    /** 是否查询字段（1是） */
    private String isQuery;
    /** 保留位数（1:1位 2:2位 0：整数） */
    private Integer columnFixed;
    /** 最小值 */
    private Integer columnMin;
    /** 最大值 */
    private Integer columnMax;
    /** 字符最大长度 */
    private Integer maxSize;
    /** 查询方式（EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围） */
    private String queryType;

    /** 显示类型（input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件、image图片上传控件、upload文件上传控件、editor富文本控件） */
    private String htmlType;

    /** 字典类型 */
    private String dictType;


    /** 排序 */
    private Integer sort;

    /** 搜索值 */
    private String searchValue;

    /** 创建者 */
    private String createBy;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /** 更新者 */
    private String updateBy;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /** 备注 */
    private String remark;

    /** 请求参数 */
    @TableField(exist = false)
    private Map<String, Object> params;

    public boolean isPk()
    {
        return isPk(this.isPk);
    }

    public boolean isPk(String isPk)
    {
        return isPk != null && StringUtils.equals("1", isPk);
    }
    //是否查重
    public boolean isRepetition() {
        return this.isRepetition!=null && StringUtils.equals("1", this.isRepetition);
    }

    public boolean isSuperColumn()
    {
        return isSuperColumn(this.javaField);
    }

    public static boolean isSuperColumn(String javaField)
    {
        return StringUtils.equalsAnyIgnoreCase(javaField,
                // BaseEntity
                "id","createId","updateId", "createTime", "updateTime","deleteEnum","remarks" ,"version","tenantId","orgId",
                // TreeEntity
                "parentIds");
    }
    public boolean isList()
    {
        return isList(this.isList);
    }

    public boolean isList(String isList)
    {
        return isList != null && StringUtils.equals("1", isList);
    }
    //是否查询字段
    public boolean isQuery()
    {
        return isRequired(this.isQuery);
    }

    public boolean isQuery(String isQuery)
    {
        return isQuery != null && StringUtils.equals("1", isQuery);
    }
    //是否必须
    public boolean isRequired()
    {
        return isRequired(this.isRequired);
    }

    public boolean isRequired(String isRequired)
    {
        return isRequired != null && StringUtils.equals("1", isRequired);
    }
    //是否限制字符长度
    public boolean isHasMaxSize()
    {
        return isHasMaxSize(this.maxSize);
    }

    public boolean isHasMaxSize(Integer maxSize)
    {
        return maxSize != null && maxSize>0;
    }
    public boolean isEditFun()
    {
        return isEditFun(this.isEdit);
    }

    public boolean isEditFun(String isEdit)
    {
        return isEdit != null && StringUtils.equals("1", isEdit);
    }

    public boolean isInsertFun()
    {
        return isInsertFun(this.isInsert);
    }

    public boolean isInsertFun(String isInsert)
    {
        return isInsert != null && StringUtils.equals("1", isInsert);
    }
    public boolean isEnumCol()
    {
        return isEnumCol(this.isEnum);
    }

    public boolean isEnumCol(String isEnum)
    {
        return isEnum != null && (StringUtils.equals("1", isEnum)||StringUtils.equals("2", isEnum));
    }

    public boolean isEnumFun()
    {
        return isEnumFun(this.isEnum);
    }

    public boolean isEnumFun(String isEnum)
    {
        return isEnum != null && StringUtils.equals("1", isEnum);
    }
    public boolean isBooleanEnumFun()
    {
        return isEnumFun(this.isEnum);
    }

    public boolean isBooleanEnumFun(String isEnum)
    {
        return isEnum != null && StringUtils.equals("2", isEnum);
    }
}
